DynamoDBのSet型で、新しいAttributeに対するaddをした場合にどうなるのか試してみた

DynamoDBのSet型で、新しいAttributeに対するaddをした場合にどうなるのか試してみた

問題なくaddできます。
Clock Icon2024.10.11

DynamoDBにはSet型があります。Set型のデータを追加するときは、setまたはaddの更新式を利用します。このとき、すでに存在するAttributeに対するaddではなく、新しいAttributeに対するaddをした場合にどうなるのか気になったので、試してみました。

おすすめの方

  • DynamoDBのSet型で新しいAttributeに対するaddをした場合にどうなるのか知りたい方
  • DynamoDBのSet型でデータをaddの更新式を利用して追加したい方

適当なDynamoDBテーブルを用意する

次のDynamoDBテーブルを作成します。

  • Name: set-test-table
  • PK: itemId
aws dynamodb create-table \
    --table-name set-test-table \
    --attribute-definitions AttributeName=itemId,AttributeType=S \
    --key-schema AttributeName=itemId,KeyType=HASH \
    --billing-mode PAY_PER_REQUEST

DynamoDBテーブルに適当なデータを新規作成する

適当なデータを新規作成するスクリプト

put_item.py
import boto3

table = boto3.resource("dynamodb").Table("set-test-table")

def main() -> None:
    put({"itemId": "item777"})

def put(item: dict) -> None:
    table.put_item(Item=item)

if __name__ == "__main__":
    main()

パーティションキーだけのItemが追加されました。

01_dynamodb

DynamoDBテーブルにSet型のデータをaddする

Set型のデータをaddするスクリプト

update_item.py
import boto3

table = boto3.resource("dynamodb").Table("set-test-table")

def main() -> None:
    update("item777", {"apple", "banana"})
    update("item777", {"cherry", "durian"})

def update(item_id: str, fruit: set[str]) -> None:
    table.update_item(
        Key={"itemId": item_id},
        UpdateExpression="ADD #fruit :fruit",
        ExpressionAttributeNames={"#fruit": "fruit"},
        ExpressionAttributeValues={":fruit": fruit},
    )

if __name__ == "__main__":
    main()

Set型のデータが追加されました。2連続でaddしても問題ありません。

02_dynamodb

03_dynamodb

さいごに

DynamoDBのSet型で、新しいAttributeに対するaddは問題なく実行できました。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.